package it.vecchiContratti;

import com.thoughtworks.xstream.XStream;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.JOptionPane;

        


public class GestoreContratti 
{
    private ArrayList<Contratto> contratti;
    private String fileContratti;
    
    
    public GestoreContratti(String f)
    {
         contratti = new ArrayList<Contratto>();
         fileContratti = new String(f);
    }
    
    public void aggiungiContratto(String numero, String dataInizio, int durata,
            String importo, String tipo, String azienda)
    {
        Contratto c = new Contratto(numero, dataInizio, durata, importo, tipo, azienda);
        contratti.add(c);
    }
    
    public Contratto ricercaContratto(String num)            
    {
        Contratto c = null;
        for(int i=0; i< contratti.size(); i++)    
        {
            if(contratti.get(i).getNumero().equals(num))
            {
                c = contratti.get(i);
            }
        }
        if(c==null)
        {
            JOptionPane.showMessageDialog(null, "NUMERO CONTRATTO INESISTENTE");
        }
        return c;
    }
    
    public int ricercaIndiceContratto(String num)            
    {
        int index = -1;
        for(int i=0; i< contratti.size(); i++)    
        {
            if(contratti.get(i).getNumero().equals(num))
            {
                index = i;
            }
        }
        return index;
    }
    
    public void eliminaContratto(String num)
    {
        int index = ricercaIndiceContratto(num);
        if(index >= 0)
        {
            contratti.remove(index);
        }
        else
        {
            JOptionPane.showMessageDialog(null, "NUMERO CONTRATTO INESISTENTE");
        }
    }
    
    public void memorizzaElencoContratti()
    {
        try
        {
            File fc = new File(fileContratti);
            if(fc.exists())
            {
                fc.delete();
            }
            fc.createNewFile();
            FileWriter fileContrattiWriter = new FileWriter(fc);
            XStream xstream = new XStream();            
            xstream.alias("Data", Data.class);
            xstream.alias("Contratto", Contratto.class);                      
            xstream.toXML(contratti, fileContrattiWriter);         
            fileContrattiWriter.close();
        }
        catch(IOException e)
        {
            JOptionPane.showMessageDialog(null, "IMPOSSIBILE SCRIVERE I CONTRATTI SUL FILE");
        }        
    }
    
    public void caricaElencoContratti()
    {
        File fc = new File(fileContratti);
        if(fc.exists())
        {
            try
            {
                FileReader fileReader = new FileReader(fc);
                XStream xstream = new XStream();            
                xstream.alias("Data", Data.class);
                xstream.alias("Contratto", Contratto.class);
                contratti = (ArrayList<Contratto>)xstream.fromXML(fileReader, contratti);
            }
            catch(IOException e)
            {
                JOptionPane.showMessageDialog(null, "IMPOSSIBILE LEGGERE I DATI");
            }                     
        }       
    }
    
    public void stampaTuttiContratti()
    {
        for(int i=0;i<contratti.size();i++)
        {
            contratti.get(i).stampaContratto();
        }
    }
    
    public ArrayList<Contratto> getTuttiContratti()
    {
        return contratti;
    }
    
    public ArrayList<Contratto> getContrattiInScadenza()
    {
        ArrayList<Contratto> contrattiInScadenza = new ArrayList<Contratto>();
        for(int i=0;i<contratti.size();i++)
        {
            if(contratti.get(i).getDataScadenza().confrontaConDataCorrente() <= 31 &&
                    contratti.get(i).getDataScadenza().confrontaConDataCorrente() >= 0)
            {
                contrattiInScadenza.add(contratti.get(i));
            }
        }
        return contrattiInScadenza;
    }
    
    public void prorogaContratto(String num, int p)
    {
        int indice = ricercaIndiceContratto(num);
        if(indice >= 0)
        {
            contratti.get(indice).proroga(p);
        }
        else
        {
            JOptionPane.showMessageDialog(null, "NUMERO CONTRATTO INESISTENTE");
        }
    }
}

